home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / tango2.lha / SOURCES / RAY3.s < prev    next >
Text File  |  1988-07-19  |  11KB  |  535 lines

  1. ; ****************************************
  2. ; ** INTRO NUMBER 5 (C) 1990 CRYPTIC UK **
  3. ; ** CODED BY: TANGO                    **
  4. ; ** MUSIC BY: COUNT                    **
  5. ; ****************************************
  6.  
  7.     opt c-
  8.     section blitter,code_c            Chip Ram please !!
  9.     include    df1:definitions            Give me some hardware reggies
  10.     include    df1:macros                Give me some macros
  11.     
  12.         
  13. ;LOCAL CONSTANTS
  14.  
  15. icra        equ $bfed01                
  16. allocmem     =-30-168                
  17. freemem     =-30-180                
  18. fontmemory    =4000
  19.  
  20.  
  21. TAKEOVER:
  22.         
  23.     LEA custom,a5        
  24.     LEA GFXLIB(PC),a1             Point to 'graphics.library'
  25.     MOVEQ #0,D0                     Doesn't matter which version
  26.      MOVE.L 4.w,a6                 EXECBASE
  27.     jsr    -132(a6)                 task switching off (forbid)
  28.      JSR -$228(a6)                  Openlibrary
  29.      MOVE.L D0,GFXBASE             Store library address
  30.  
  31.         
  32. ;Now put the graphic addresses in the CopperList         
  33.  
  34.      move.l    screenx,d1            Bitplane memory address
  35.     move.w    d1,bp1lo+2            for scroll 1.
  36.      swap    d1
  37.      move.w    d1,bp1hi+2
  38.  
  39.      move.l    screenx,d1            Bitplane memory address
  40.     ADD.L    #10000,D1
  41.     move.w    d1,bp3lo+2            for scroll 1.
  42.      swap    d1
  43.      move.w    d1,bp3hi+2
  44.  
  45.      move.l    screenx,d1            Bitplane memory address
  46.     ADD.L    #10000*2,D1
  47.     move.w    d1,bp5lo+2            for scroll 1.
  48.      swap    d1
  49.      move.w    d1,bp5hi+2
  50.  
  51.      move.l    screeny,d1            Bitplane memory address
  52.     move.w    d1,abp1lo+2            for scroll 2.
  53.      swap    d1
  54.      move.w    d1,abp1hi+2
  55.  
  56.     move.l    screeny,d1            Bitplane memory address
  57.     ADD.L    #10000,D1
  58.     move.w    d1,abp3lo+2            for scroll 2.
  59.      swap    d1
  60.      move.w    d1,abp3hi+2
  61.  
  62.     move.l    screeny,d1            Bitplane memory address
  63.     ADD.L    #10000*2,D1
  64.     move.w    d1,abp5lo+2            for scroll 2.
  65.      swap    d1
  66.      move.w    d1,abp5hi+2
  67.  
  68.  
  69. ; ** SET UP EVEN BITPLANES 2,4,6 **
  70.  
  71.     MOVE.L    #PLAY2,D1
  72.     MOVE.W    D1,BP2LO+2
  73.     SWAP    D1
  74.     MOVE.W    D1,BP2HI+2
  75.     
  76.     MOVE.L    #PLAY2,D1
  77.     ADD.L    #10240,D1
  78.     MOVE.W    D1,BP4LO+2
  79.     SWAP    D1
  80.     MOVE.W    D1,BP4HI+2
  81.     
  82.     MOVE.L    #PLAY2,D1
  83.     ADD.L    #10240*2,D1
  84.     MOVE.W    D1,BP6LO+2
  85.     SWAP    D1
  86.     MOVE.W    D1,BP6HI+2
  87.     
  88.      move.l GFXBASE,d0            Move gfxbase offset to d0
  89.      MOVE.L D0,A6                
  90.      MOVE.W #$80,dmacon(a5)        Turn off copper whilst changing it
  91.      MOVE.L $32(A6),WBCOPPER         Store old (WBench) copper address
  92.      MOVE.L #OURCOPPER,$32(A6)    Point to new copper list (our own)
  93.      MOVE.W #$8080,dmacon(a5)    Re-enable copper
  94.      MOVE.W #$8010,intena(a5)        
  95.      MOVE.L $6c,old                Save work bench interrupt
  96.      MOVE.L #LEV3,$6c            Point to were to set up interrupt
  97.     move.w    intenar(a5),systemints
  98.     move.b    #%01111111,icra        Kill keyboard.
  99.         
  100. WAIT:     
  101.     BTST #6,$BFE001                This waits for the left
  102.      BNE.S    WAIT                mouse button to be pressed
  103.     move.l    4.w,a6                EXECBASE
  104.      MOVE.L old,$6c                Restore system interrupts
  105.     MOVE.L GFXBASE,A6
  106.      MOVE.W #$80,dmacon(a5)        Disable DMA
  107.      MOVE.L WBCOPPER,$32(A6)        Restore old copperlist
  108.      MOVE.W #$8080,dmacon(a5)    Enable DMA
  109.      move.w    systemints,d0        Systems interrupt
  110.      or.w    #$c000,d0
  111.      move.w    d0,intena(a5)        Enable OS interrupts
  112.      move.b    #%10011011,icra        Enable keyboard
  113.     clr.w    $dff0a8                Clear music
  114.     clr.w    $dff0b8
  115.     clr.w    $dff0c8
  116.     clr.w    $dff0d8
  117.     move.w    #$f,$dff096
  118.     rts
  119.  
  120.  
  121. ERROR:    
  122.     move.l 4.w,a6                Get EXECBASE
  123.     jsr    -138(a6)                Permit ( multi-tasking on )
  124.     moveq    #0,d0                Clear d0
  125.      RTS                            Return to AmigaDOS
  126.  
  127.  
  128. ;This is the NEW level 3 interrupt
  129.  
  130. LEV3:
  131.      Save_all                    Save all registers to the stack
  132.     lea    custom,a5
  133.     AND #$10,intreqr(a5)           Check if interrupt is from Copper 
  134.     BNE out
  135.     move.w    #$8010,$9c            Cause Copper interrupt                                
  136.  
  137. ; ** Main Routines called every VBI **
  138.     
  139.     bsr    bounce2
  140.     bsr    testscroll
  141.     bsr    bounce
  142.     bsr    testscroll2
  143.         
  144. out:     
  145.     Return_all
  146.     DC.W $4ef9                    hex value for  JMP instruction
  147. old:     
  148.     DC.L 0                        will jump to normal interrupt
  149.  
  150.  
  151. ; ** THE SCROLL ROUTINE **
  152.  
  153. testscroll:
  154.     tst.l    stopper
  155.     beq.s    scroll
  156.     sub.l    #1,stopper
  157.     rts
  158. scroll:
  159.     cmp.l    #30,val                    Blitshifted all <<<
  160.     blo.s    coarse_scroll_it        No then get doing it !!
  161.     bsr        blit_char                Blit letter to screen
  162.     clr.l    val                        Reset index
  163. coarse_scroll_it:
  164.     bsr        coarse                    Scroll all line
  165.     rts                            
  166.  
  167. testscroll2:
  168.     tst.l    stopper2                Test for pause.
  169.     beq.s    scroll2
  170.     sub.l    #1,stopper2
  171.     rts
  172. scroll2:
  173.     cmp.l    #30,val2                Blitshifted all <<<
  174.     blo.s    coarse_scroll_it2        No then get doing it blitter man !!
  175.     bsr        blit_char2                Blit letter to screen
  176.     clr.l    val2                    Reset index
  177. coarse_scroll_it2:
  178.     bsr        coarse2                    Scroll all line
  179.     rts                            
  180.  
  181.     
  182. ; ** BLIT LETTER ON THE SCREEN **
  183.  
  184. blit_char
  185.     jsr        text
  186.     lea        custom,a5                Get custom chip address
  187.     move.l    screenx,a0                 The screen on which scrolly is.
  188.     move.l    #font,a1                 Put font in blitter source
  189.     add.l    d2,a1
  190.     MOVE.L    #2,D1
  191. blit_test:
  192.     btst    #14,$dff002                 Blitter busy !!!
  193.     bne    blit_test                     Lets wait till she finishes !
  194.     move.w    #$ffff,bltafwm(a5)        Mask 
  195.     move.w    #$ffff,bltalwm(a5)        Mask 
  196.     move.l    a0,bltdpth(a5)             Blitter dest D (BOTTOM OF SCREEN)
  197.     move.l    a1,bltapth(a5)             Blitter source A (SCROLLING FONT)
  198.     move.w    #36,bltamod(a5)             Modulo (20-1)*2
  199.     move.w    #36,bltdmod(a5)             Modulo (20-1)*2
  200.     move.w    #$9f0,bltcon0(a5)         Minterms D=A
  201.     clr.w    bltcon1(a5)                 Set Ascending mode
  202.      move.w    #32*64+2,bltsize(a5)     Blit size (SIZE OF FONT)
  203.     ADD.L    #10000,A0
  204.     ADD.L    #40*200,A1
  205.     DBF        D1,BLIT_TEST
  206.     rts                                  Return
  207.  
  208.  
  209. ; ** BLITSHIFT THE ENTIRE SCROLL LINE **
  210. ;
  211. ;     FUNCTION: TO BARREL SHIFT THE ENTIRE SCROLLING MESSAGE.
  212.  
  213. coarse:
  214.     lea        custom,a5                 
  215.     move.l    screenx,a0                
  216.     move.l    a0,a1
  217.     add.l    #2,a1
  218.     move.l    #2,d1
  219.     move    speed,d2                
  220.     incl    #4,val                    
  221.     ror        #4,d2                    ; Set to correct bits (12-15)
  222.     or.w    #$09f0,d2
  223. blit_wait:
  224.     btst    #14,$dff002            
  225.     bne        blit_wait
  226.     move.l    #-1,bltafwm(a5)
  227.     move.l    a1,bltapth(a5)
  228.     move.l    a0,bltdpth(a5)
  229.     move.w    #0,bltamod(a5)
  230.     move.w    #0,bltdmod(a5)
  231.     move.w    d2,bltcon0(a5)    
  232.     move.w    #32*64+20,bltsize(a5)
  233.     add.l    #10000,a0
  234.     add.l    #10000,a1
  235.     dbf        d1,blit_wait
  236.     rts    
  237.  
  238. speed:    dc.w    12
  239.  
  240.  
  241. ; ** SCROLL NUMBER TWO **
  242. ;
  243. ; DOCUMENTED IN SCROLL NUMBER ONE.
  244.  
  245. blit_char2:
  246.     jsr        text2
  247.     lea        custom,a5                
  248.     move.l    screeny,a0                 
  249.     move.l    #font,a1                 
  250.     add.l    d2,a1
  251.     MOVE.L    #2,D6
  252. blit_test2:
  253.     btst    #14,$dff002                 
  254.     bne    blit_test2                     
  255.     move.w    #$ffff,bltafwm(a5)        
  256.     move.w    #$ffff,bltalwm(a5)        
  257.     move.l    a0,bltdpth(a5)             
  258.     move.l    a1,bltapth(a5)             
  259.     move.w    #36,bltamod(a5)             
  260.     move.w    #36,bltdmod(a5)             
  261.     move.w    #$9f0,bltcon0(a5)         
  262.     clr.w    bltcon1(a5)                 
  263.      move.w    #32*64+2,bltsize(a5)     
  264.     ADD.L    #10000,A0
  265.     ADD.L    #40*200,A1
  266.     DBF        D6,BLIT_TEST2
  267.     rts                                  
  268.  
  269. coarse2:
  270.     lea        custom,a5                 
  271.     move.l    screeny,a0                
  272.     move.l    a0,a1
  273.     add.l    #2,a1
  274.     move.l    #2,d4
  275.     incl    #4,val2                    
  276.     move    speed2,d7                
  277.     ror        #4,d7                    
  278.     or        #%100111110000,d7        
  279. blit_wait2:
  280.     btst    #14,$dff002            
  281.     bne        blit_wait2
  282.     move.l    #-1,bltafwm(a5)
  283.     move.l    a1,bltapth(a5)
  284.     move.l    a0,bltdpth(a5)
  285.     move.w    #0,bltamod(a5)
  286.     move.w    #0,bltdmod(a5)
  287.     move.w    d7,bltcon0(a5)    
  288.     move.w    #32*64+20,bltsize(a5)
  289.     add.l    #10000,a0
  290.     add.l    #10000,a1
  291.     dbf        d4,blit_wait2
  292.     rts
  293.     
  294. speed2:    dc.w    12
  295.  
  296.  
  297. ; ** THIS CRAPPY CODE BOUNCES THE SCROLLY MESSAGE NUMBER TWO **
  298. ;
  299. ;     ENTRYS  : YCORD-HOW FAR UP AND DOWN SCREEN TO GO.
  300. ;             : DELTAY-WAIT COMMAND IN COPPERLIST.
  301. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  302.  
  303. bounce:
  304.     cmp.l    #66,ycord
  305.     beq.s    up
  306.     add.l    #1,ycord
  307.     sub.b    #1,deltay
  308.     rts
  309. up: cmp.l    #66,ycordminus
  310.     beq.s    rst_cord
  311.     add.l    #1,ycordminus
  312.     add.b    #1,deltay
  313.     rts
  314. rst_cord:
  315.     clr.l    ycord
  316.     clr.l    ycordminus
  317.     rts
  318.     
  319. ycord:        dc.l    0
  320. ycordminus:    dc.l    0
  321.     even
  322.  
  323.  
  324. ; ** THIS CRAPPY CODE BOUNCES SCROLLY MESSAGE NUMBER ONE (ONE AT THE TOP) **
  325. ;
  326. ;     ENTRYS  : YCORD2-HOW FAR UP AND DOWN SCREEN TO GO.
  327. ;             : DELTAY2-WAIT COMMAND IN COPPERLIST.
  328. ;     FUNCTION: BOUNCE THE SCROLLY MESSAGE.
  329.  
  330. bounce2:
  331.     cmp.l    #66,ycord2
  332.     beq.s    up2
  333.     add.l    #1,ycord2
  334.     add.b    #1,deltay2
  335.     rts
  336. up2:cmp.l    #66,ycordminus2
  337.     beq.s    rst_cord2
  338.     add.l    #1,ycordminus2
  339.     sub.b    #1,deltay2
  340.     rts
  341. rst_cord2:
  342.     clr.l    ycord2
  343.     clr.l    ycordminus2
  344.     rts
  345.     
  346. ycord2:        dc.l    0
  347. ycordminus2:dc.l    0
  348.     even
  349.  
  350.  
  351. ; ** CHARACTER DECODER ROUTINE **
  352.  
  353. ;    CHARACTER BASE ADDRESS RETURNED IN D2
  354. ;     JUST ADD THIS TO YOUR FONT ADDREES.
  355.  
  356. text:
  357.     Clr.l    d1
  358.     move.l    acurent,a2
  359.     move.b    (A2),d1
  360.     cmp.b    #254,d1
  361.     beq.s    stop_scroll
  362.     Cmp.b    #255,d1
  363.     bne        over
  364.     Move.l    #Texter,a2
  365.     MOVE.L    #TEXTER,ACURENT
  366.     Move.b    (a2),d1
  367. Over
  368.     Add.l    #1,Acurent
  369.     Lea        Char,a1
  370.     Sub.l    #32,d1
  371.     Add.l    d1,d1
  372.     Move.w    (a1,d1),d2                ; CHAR BASE ADDRESS IN D2.
  373.     Rts
  374. stop_scroll:
  375.     move.l    #5136,d2                ; Blank letter.
  376.     add.l    #1,acurent
  377.     move.l    #150,stopper
  378.     rts
  379.  
  380.  
  381. ; ** CHARACTER OFFSETS TO FONT **
  382. Char:
  383.     dc.w    5136,3864,0,0,0,0,0,5132,3868,3872,0,0
  384.     dc.w    5128,3876,5124,0,3860,2584,2588,2592,2596,3840
  385.     dc.w    3844,3848,3852,3856,0,0,0,0,0,5120,0
  386.     dc.w    0,4,8,12,16,20,24,28,32,36,1280,1284,1288,1292,1296
  387.     dc.w    1300,1304,1308,1312,1316,2560,2564,2568,2572,2576,2580
  388.     dc.w    0,0,0
  389.  
  390.  
  391. ; ** MESSAGE NUMBER ONE **
  392. Acurent:
  393.     DC.L    Texter
  394. Texter:
  395.     DC.B    " CRYPTIC UK STRIKE BACK !!!        "
  396.     DC.B    "   TANGO   ",254
  397.     DC.B    "  YES WELL I'M OFF FOR NOW TO SEE IF THIS ROUTINE WORKS.     "
  398.     DC.B    255
  399.     even
  400.  
  401.  
  402. text2:
  403.     Clr.l    d1
  404.     move.l    acurent2,a2
  405.     move.b    (A2),d1
  406.     cmp.b    #254,d1
  407.     beq        pause_scroll
  408.     Cmp.b    #255,d1
  409.     bne        over2
  410.     Move.l    #Texter2,a2
  411.     MOVE.L    #TEXTER2,ACURENT2        ; RESET TO BEGINING OF MESSAGE.
  412.     Move.b    (a2),d1
  413. Over2:
  414.     Add.l    #1,Acurent2
  415.     Lea        Char,a1
  416.     Sub.l    #32,d1
  417.     Add.l    d1,d1
  418.     Move.w    (a1,d1),d2                ; CHAR BASE ADDRESS IN D2.
  419.     rts
  420. pause_scroll:
  421.     move.l    #5136,d2
  422.     add.l    #1,acurent2
  423.     move.l    #150,stopper2
  424.     rts
  425.  
  426.  
  427. ; ** MESSAGE NUMBER TWO **
  428. Acurent2
  429.     Dc.l    Texter2
  430. Texter2:
  431.     Dc.b    "WOW !!!  THIZ IS SCROLLER NUMBER 2 ",254," AND ITS COOOOOL... ",255
  432.     even
  433.  
  434.  
  435.             
  436.  
  437. ; ** THE COPPERLIST **
  438.  
  439. OURCOPPER:
  440.         dc.w    $120,0
  441.         dc.w    $122,0
  442.         dc.w    bpl1mod,-2,bpl2mod,-2
  443.         dc.w    diwstrt,$2c81+16,diwstop,$2cc1-16
  444.         dc.w    bplcon0,$6600,bplcon1,$0000
  445.         dc.w    ddfstrt,$30,ddfstop,$d0
  446.         dc.w    color01,$000
  447.         dc.w    color08,$000,color09,$f00,color10,$0f0,color11,$fff
  448.         dc.w    color12,$eaf,color13,$145,color14,$a00,color15,$eee
  449. bp2lo:    dc.w    bpl2ptl,$0000
  450. bp2hi:    dc.w    bpl2pth,$0000
  451. bp4lo:    dc.w    bpl4ptl,$0000
  452. bp4hi:    dc.w    bpl4pth,$0000
  453. bp6lo:    dc.w    bpl6ptl,$0000
  454. bp6hi:    dc.w    bpl6pth,$0000
  455. deltay2:wait    $3909,$fffe
  456.         dc.w    color01,$eee
  457. bp1lo:    dc.w    bpl1ptl,$0000
  458. bp1hi:    dc.w    bpl1pth,$0000
  459. bp3lo:    dc.w    bpl3ptl,$0000
  460. bp3hi:    dc.w    bpl3pth,$0000
  461. bp5lo:    dc.w    bpl5ptl,$0000
  462. bp5hi:    dc.w    bpl5pth,$0000
  463. deltay:    wait    $da09,$fffe
  464. abp1lo:    dc.w    bpl1ptl,$0000
  465. abp1hi:    dc.w    bpl1pth,$0000
  466. abp3lo:    dc.w    bpl3ptl,$0000
  467. abp3hi:    dc.w    bpl3pth,$0000
  468. abp5lo:    dc.w    bpl5ptl,$0000
  469. abp5hi:    dc.w    bpl5pth,$0000
  470.          DC.W    color01,$eee,color02,$dde
  471.         DC.W    color03,$bbd
  472.         DC.W    color04,$aac
  473.         DC.W    color05,$88c
  474.         DC.W    color06,$77b
  475.         DC.W    color07,$65a
  476.         end_copper
  477.         
  478.  
  479. ;LOCAL CONSTANTS
  480.  
  481. WBCOPPER:        DC.L    0
  482. GFXLIB:            DC.B     "graphics.library",0
  483. GFXBASE:        DC.L    0
  484. systemints:        dc.l    0
  485. scroll_offset:    dc.l    0
  486. screenx:        dc.l    picture
  487. screeny:        dc.l    picture2
  488. letter:            dc.b    0
  489. letter2:        dc.b    0
  490. val:            dc.l    0
  491. val2:            dc.l    0
  492. stopper:        dc.l    0
  493. stopper2:        dc.l    0
  494.  
  495.  
  496. ;BINARY FILES TO BE INCLUDED
  497.     EVEN
  498. picture2    
  499.     dcb.b    10000*3,0
  500. picture:
  501.     dcb.b    10000*3,0
  502. font
  503.     incbin    df0:METALCHARS
  504. PLAY2:
  505.     INCBIN    DF1:PIC.IFF
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.     
  513.     
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.     
  522.     
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.